import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.*;

public class CollectMain {

    public static void main(String[] args) throws IOException {
        /** List 有序列表 */
        // List的行为和数组几乎完全相同：List内部按照放入元素的先后顺序存放，每个元素都可以通过索引确定自己的位置，List的索引和数组一样，从0开始。
        // 数组和List类似，也是有序结构，如果我们使用数组，在添加和删除元素的时候，会非常不方便。例如，从一个已有的数组{'A', 'B', 'C', 'D', 'E'}中删除索引为2的元素
        // 这个“删除”操作实际上是把'C'后面的元素依次往前挪一个位置，而“添加”操作实际上是把指定位置以后的元素都依次向后挪一个位置，腾出来的位置给新加的元素。这两种操作，用数组实现非常麻烦。
        ArrayList<String> sites = new ArrayList<String>();
        sites.add("Google");
        sites.add("Runoob");
        sites.add("Taobao");
        sites.add("Weibo");
        System.out.println(sites.get(1));  // 访问第二个元素

        for (String i : sites) {
            System.out.println(i);
        }

        /** HashMap */
        Student s1 = new Student("张三", 25);
        Map<String, Student> map = new HashMap<>();  // 初始化
        map.put("A", s1);  // 添加值
        map.put("B", s1);  // 添加值
        Student target = map.get("A"); // 通过key查找并返回映射的Student实例 如果key不存在，则返回null
        System.out.println(target.getName());
        // 遍历
        for (Map.Entry<String, Student> entry : map.entrySet()) {
            String key = entry.getKey();
            Student value = entry.getValue();
            System.out.println(key + " = " + value.getName());  // A = 张三  B = 张三
        }

        /** EnumMap */
        Map<Weekday, String> map2 = new EnumMap<>(Weekday.class);
        map2.put(Weekday.MON, "星期一");
        map2.put(Weekday.TUE, "星期二");
        map2.put(Weekday.WED, "星期三");
        map2.put(Weekday.THU, "星期四");
        System.out.println(map2.get(Weekday.WED));  // 星期三

        /** 读取配置文件 */
        String f = "setting.properties";
        Properties props = new Properties();
        props.load(new java.io.FileInputStream(f));

        String filepath = props.getProperty("last_open_file");
        String interval = props.getProperty("auto_save_interval", "120");
        System.out.println(filepath);  // /data/hello.txt
        System.out.println(interval);  // 60

        /** Set */
        Set<String> set = new HashSet<>();
        System.out.println(set.add("abc")); // true 添加元素
        System.out.println(set.add("xyz")); // true
        System.out.println(set.add("xyz")); // false，添加失败，因为元素已存在
        System.out.println(set.contains("xyz")); // true，元素存在
        System.out.println(set.contains("XYZ")); // false，元素不存在
        System.out.println(set.remove("hello")); // false，删除失败，因为元素不存在
        System.out.println(set.size()); // 2，一共两个元素
    }

}

enum Weekday {
    MON, TUE, WED, THU, FRI, SAT, SUN;
}


class Student {
    protected String name;
    protected int score;

    public Student(String name, int score) {
        this.name = name;
        this.score = score;
    }

    public String getName() {
        return name;
    }

    public int getScore() {
        return score;
    }
}